#! /bin/bash
comandoVIP="Iniciar_B"
if [ -z "${GRUPO}" -o -z "${BINDIR}" ]; then
        source Grabar_L
else
        auxDir="${GRUPO}"/"${BINDIR}"
        source "${auxDir}"/Grabar_L
fi
CONFFILE="Instalar_TP.conf"
GRUPO12="grupo12"

#---------------MODULO VERIFICACION DE INSTALACION----------------
# De acuerdo al parametro que resivamos:
# Revisamos que este inicializado el ambiente
# Revisamos que exista el archivo .conf y este completo
# Revisamos que existan los directorios
# Revisamos que esten los archivos correspondientes para que inicie el sistema

# Creamos una variable de ambiente llamada RETURN desde el comando invocante, que es la que va a utilizar el script
# para responder si todo salio OK o no.

# PARAMETROS:
#En primer lugar el parametro de la funcion a utilizar:

# -c - Existencia .conf y bien formado
# -d - Directorios
# -f - Archivos maestros con permisos correspondientes
# -i - Ambiente inicializado

# En segundo lugar, el parametro de la funcion que invoca el modulo para el log:

# @ un string con el nombre de la func 

# ej: `source verifyInstall [-c -d -f] "Iniciar_B"`      # ATENCION, se corre como SOURCE!


confVars=( "GRUPO" "CONFDIR" "BINDIR" "MAEDIR" "ARRIDIR" "ACEPDIR" "RECHDIR" "REPODIR" "PROCDIR" "LOGDIR" "LOGEXT" "LOGSIZE" "DATASIZE" )

IFS=$'\n'

#*****Funcion para reconocer que no se haya iniciado ya el sistema*****
function alreadyInit
{
RETURN=1
for var in ${confVars[@]}; do
	camposConf="="
	if [ -z `env | grep "^$var" | cut -d$camposConf -f2` ]; then
		RETURN=0
	fi
done
}

#*****Funcion para reconocer archivo de configuracion*****
function findConf
{
if [ ! -f "$CONFFILE" ]; then
    if [ "$1" == $comandoVIP ]; then
	echo "No existe el archivo de configuracion, la instalacion no se concreto."
    fi
    Grabar_L $logGrabar "No existe el archivo de configuracion" "SE"
    RETURN=1
    return 1
fi

badVars=()
for var in ${confVars[@]}; do
    campo=`grep "^${var}" "$CONFFILE" | cut -d= -f 2`
    if [ -z "$campo" ]; then
	badVars+=(${var})
    else
	#echo "Creando variable de ambiente ${var} con el varlor $campo si estamos en la Inicializacion"
	if [ "$1" == $comandoVIP ]; then
	    export "${var}"="$campo"																																																	
	fi
    fi
done

# En caso de estar mal seteadas algunas variables,
# se indicaran, y se pedira que reinstale todo
if [ ${#badVars[@]} -gt 0 ]; then
    echo ""; echo "Las siguientes variables no han sido terminadas de setear durante la instalación:"
    Grabar_L "$logGrabar" "Variables mal formadas, reinstalar sistema" "SE"
    for var in ${badVars[@]}; do
	echo $var
    done
    echo "Por favor, reinstale el sistema."
    RETURN=1
    return 1
fi
RETURN=0
}

#*****Funcion para reconocer el seteo de los directorios*****
function dirSet
{
local badDirs=()

grep 'DIR' "${CONFFILE}" |
cut -d$camposConf -f2 |
while read var; do
    if [ ! -d "$SYSDIR/$var" ]; then
	Grabar_L "$logGrabar" "No existe el directorio $var" "E"
	badDirs+=("$var")
    fi
done

# En caso de no existir algunos directorios, los exponemos y salimos

if [ ${#badDirs[@]} -gt 0 ]; then
    echo "Los siguientes directorios no han sido creados en la instalación:"
    for var in ${badDirs[@]}; do
	echo "$var"
    done
    echo "Vuelva a instalar el sistema."
    RETURN=1
    return 1
fi
RETURN=0
}

#*****Funcion para determinar archivos maestros*****
function masterFiles
{
	RETURN=0
	grep '^MAEDIR' "${CONFFILE}" | cut -d$camposConf -f2 | while read file; do
		if [ ! -f "$SYSDIR/$file/salas.mae" ]; then
		    echo "No existe el archivo de SALAS."; Grabar_L "$logGrabar" "No existe salas.mae" "SE"
		    RETURN=1
		else
		    if [ ! -w "$SYSDIR/$file/salas.mae" ]; then
			eval `chmod a+rwx "$SYSDIR/$file/salas.mae"`
		    fi
		fi
		if [ ! -f "$SYSDIR/$file/obras.mae" ]; then
		    echo "No existe el archivo de OBRAS."; Grabar_L "$logGrabar" "No existe obras.mae" "SE"
		    RETURN=1
		else
		    if [ ! -w "$SYSDIR/$file/obras.mae" ]; then
			eval `chmod a+rwx "$SYSDIR/$file/obras.mae"`
		    fi
		fi
	done
	
	grep '^PROCDIR' "${CONFFILE}" | cut -d$camposConf -f2 | while read file; do
		if [ ! -f "${SYSDIR}/${file}/combos.dis" ]; then
		    echo "No existe el archivo de COMBOS."; Grabar_L $logGrabar "No existe combos.dis" "SE"
		    RETURN=1
		else
		    if [ ! -w "${SYSDIR}/${file}/combos.dis" ]; then
			eval `chmod a+rwx "${SYSDIR}/${file}/combos.dis"`
		    fi
		fi
	done
}

#---------------MAIN----------------

# Buscamos el directorio del archivo de configuracion
pwd=`pwd`
hallado=false

while [ $hallado = false ]; do
    aux=${pwd##*/}
    if [ "$GRUPO12" == $aux 2> /dev/null 2> /dev/null ]; then
	CONFFILE="$pwd/conf/$CONFFILE"
	SYSDIR=$pwd
	hallado=true
    else
	pwd=${pwd%/*}
    fi
done

if [ "$1" == "-c" ]; then
    findConf $2
elif [ "$1" == "-d" ]; then
    dirSet
elif [ "$1" == "-f" ]; then
    masterFiles
elif [ "$1" == "-i" ]; then
    alreadyInit
else
    echo "No hay parametros o son incorrectos."; Grabar_L "$logGrabar" "Error de llamado de funcion, faltan parametros para verifyInstall" "SE"
    RETURN=1
fi
